﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Infra.Common.DAO
{
    public class ComunaDAL
    {
        public static void Salvar(Infra.Entity.LOCCOMUNA comuna)
        {

            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                if (comuna.CODCOMUNA != 0)
                {
                    //Alterar a comuna
                    var com = dc.LOCCOMUNAs.Single(co => co.CODCOMUNA == comuna.CODCOMUNA);
                    com.STRCOMUNA = comuna.STRCOMUNA;
                    com.CODMUNICIPIO = comuna.CODMUNICIPIO;
                    com.CODPROVINCIA = comuna.CODPROVINCIA;
                    com.CODPAIS = comuna.CODPAIS;
                    dc.SubmitChanges();
                }
                else
                {
                    //Salvar a comuna
                    dc.LOCCOMUNAs.InsertOnSubmit(comuna);
                    dc.SubmitChanges();
                }
            }
        }

        public static void Excluir(int idComuna)
        {
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var com = dc.LOCCOMUNAs.Single(co => co.CODCOMUNA == idComuna);
                dc.LOCCOMUNAs.DeleteOnSubmit(com);
                dc.SubmitChanges();
            }
        }

        public static List<Infra.Entity.LOCCOMUNA> Pesquisar(int codigo, String nome, long codMunicipio, long codProvincia, long codPais)
        {
            List<Infra.Entity.LOCCOMUNA> comunas = null;
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var com = from comuna in dc.LOCCOMUNAs
                           where (((codigo.Equals(0) || codigo.Equals(comuna.CODCOMUNA)) &&
                                   (nome.Equals(string.Empty) || nome.Equals(comuna.STRCOMUNA.Contains(nome))) &&
                                   (codMunicipio.Equals(0) || codMunicipio.Equals(comuna.CODMUNICIPIO)) &&
                                   (codProvincia.Equals(0) || codProvincia.Equals(comuna.CODPROVINCIA)) &&
                                   (codPais.Equals(0) || codPais.Equals(comuna.CODPAIS))))

                           select comuna;
                comunas = com.ToList();
            }
            return comunas;
        }


        public static List<Infra.Entity.LOCCOMUNA> Pesquisar()
        {
            List<Infra.Entity.LOCCOMUNA> comunas = null;
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var com = from comuna in dc.LOCCOMUNAs
                          select comuna;
                comunas = com.ToList();
            }
            return comunas;
        }




        public static List<Infra.Entity.LOCCOMUNA> PesquisarSP(int codigo, String nome, int codMunicipio, int codProvincia, int codPais)
        {
            List<Infra.Entity.LOCCOMUNA> comunas = null;
            // Pesquisa usando Stored procedure
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                //var com = dc.SP_PESQUISA_COMUNA(codigo, nome, codMunicipio, codProvincia, codPais);
                //municipios = muni.ToList();
            }
            return comunas;
        }
    }
}
